#ifndef __LOGGER_H
#define __LOGGER_H

#include "config.h"

#ifndef MAX_LOG_FILES   /// 如果未定义最大日志文件数则默认为5
#define MAX_LOG_FILES 5 ///< 最大日志文件数
#endif

/**
 * @brief 日志级别
 *
 */
typedef enum
{
    LOG_LEVEL_INFO,    ///< 信息
    LOG_LEVEL_WARNING, ///< 警告
    LOG_LEVEL_ERROR,   ///< 错误
    LOG_LEVEL_DEBUG    ///< 调试
} LogLevel_t;

/**
 * @brief 初始化日志系统
 *
 * @param log_file 日志文件路径，例如："./log/server.log"
 */
void initLog(const char *log_file);

/**
 * @brief 分级别记录日志
 *
 * @param level 日志级别
 * @param module 模块名称
 * @param format 格式化字符串
 * @param ... 可变参数
 */
void logMessage(LogLevel_t level, const char *func, const char *module, const char *format, ...);

/**
 * @brief 关闭日志系统
 *  关闭日志系统，释放资源。
 */
void closeLog();

#define LOG_INFO(module, format, ...) logMessage(LOG_LEVEL_INFO, __func__, module, format, ##__VA_ARGS__)
#define LOG_WARNING(module, format, ...) logMessage(LOG_LEVEL_WARNING, __func__, module, format, ##__VA_ARGS__)
#define LOG_ERROR(module, format, ...) logMessage(LOG_LEVEL_ERROR, __func__, module, format, ##__VA_ARGS__)

#ifdef DEBUG /// 显示DEBUG信息
#define LOG_DEBUG(module, format, ...) logMessage(LOG_LEVEL_DEBUG, __func__, module, format, ##__VA_ARGS__)
#else
#define LOG_DEBUG(module, format, ...)
#endif

#endif /* __LOGGER_H */
